home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Dev / Oberon / source / OC / OCPrefsGUI.mod < prev    next >
Text File  |  1995-06-29  |  43KB  |  1,380 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: OCPrefsGUI.mod $
  4.   Description: Implements a GUI for OCPrefs using EAGUI.library.
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 2.2 $
  8.       $Author: fjc $
  9.         $Date: 1995/06/29 19:13:34 $
  10.  
  11.   Copyright © 1995, Frank Copeland
  12.   This module forms part of the OC program
  13.   See OCPrefs.doc for conditions of use and distribution
  14.  
  15.   Log entries are at the end of the file.
  16.  
  17. *************************************************************************)
  18.  
  19. <* STANDARD- *> <* MAIN- *>
  20.  
  21. MODULE OCPrefsGUI;
  22.  
  23. IMPORT
  24.   SYS := SYSTEM, Kernel, Errors, str := Strings, s := Sets, e := Exec,
  25.   es := ExecSupport, eu := ExecUtil, u := Utility, d := Dos,
  26.   gfx := Graphics, i := Intuition, gt := GadTools, df := DiskFont,
  27.   ea := EAGUI, eam := EAGUI_Macros, spt := EASupport, lbl := EALabels,
  28.   frm := EAFrames, ead := EADialogs, OCPrefsRev, OCM,
  29.   cat := OCPrefsStrings, Events, ASL, wb := Workbench, du := DosUtil,
  30.   Icon;
  31.  
  32. (* ---------------------------------- *)
  33.  
  34. CONST
  35.  
  36.   (* Gadget IDs *)
  37.  
  38.   PrefsFileID  = 0;
  39.   PathID       = 1;
  40.   PathStrID    = 2;
  41.   DeleteID     = 3;
  42.   SymPathID    = 4;
  43.   SymExtID     = 5;
  44.   ObjPathID    = 6;
  45.   ObjExtID     = 7;
  46.   ErrPathID    = 8;
  47.   ErrExtID     = 9;
  48.   SetNamesID   = 10;
  49.   ClearNamesID = 11;
  50.   CodeSizeID   = 12;
  51.   ConstSizeID  = 13;
  52.  
  53.   VerboseID    = 14;
  54.   MakeIconsID  = 15;
  55.  
  56.   NumGadgets1  = 16;
  57.  
  58.   StandardID   =  0;
  59.   InitialiseID =  1;
  60.   MainID       =  2;
  61.   WarningsID   =  3;
  62.   RegisterID   =  4;
  63.   DebugID      =  5;
  64.   SmallCodeID  =  6;
  65.   SmallDataID  =  7;
  66.   ResidentID   =  8;
  67.  
  68.   TypeChkID    =  9;
  69.   OvflChkID    = 10;
  70.   IndexChkID   = 11;
  71.   RangeChkID   = 12;
  72.   CaseChkID    = 13;
  73.   NilChkID     = 14;
  74.   ReturnChkID  = 15;
  75.   StackChkID   = 16;
  76.   AssertChkID  = 17;
  77.   LongVarsID   = 18;
  78.   ClearVarsID  = 19;
  79.  
  80.   NumGadgets2  = 20;
  81.  
  82.   BrowseID     = 101;
  83.   AboutID      = 102;
  84.   SaveID       = 103;
  85.   SaveAsID     = 104;
  86.   QuitID       = 105;
  87.   AddID        = 106;
  88.   MoreID       = 107;
  89.   AcceptID     = 108;
  90.   CancelID     = 109;
  91.  
  92. (* ---------------------------------- *)
  93.  
  94. TYPE
  95.  
  96.   SettingsDialog = POINTER TO SettingsDialogRec;
  97.   OptionsDialog = POINTER TO OptionsDialogRec;
  98.  
  99.   SettingsDialogRec = RECORD (ead.EADialogRec)
  100.     label : ARRAY 6 OF lbl.Label;
  101.     frame : ARRAY 6 OF frm.Frame;
  102.     gadget : ARRAY NumGadgets1 OF i.GadgetPtr;
  103.     pathLabels : e.ListPtr;
  104.     selectedPath : INTEGER;
  105.     optionsDlg : OptionsDialog;
  106.   END; (* SettingsDialogRec *)
  107.  
  108.   OptionsDialogRec = RECORD (ead.EADialogRec)
  109.     label : ARRAY 2 OF lbl.Label;
  110.     frame : ARRAY 2 OF frm.Frame;
  111.     gadget : ARRAY NumGadgets2 OF i.GadgetPtr;
  112.   END; (* OptionsDialogRec *)
  113.  
  114. (* ---------------------------------- *)
  115.  
  116. VAR
  117.  
  118.   scr : i.ScreenPtr;
  119.   visualInfo : gt.VisualInfo;
  120.   drawInfo : i.DrawInfoPtr;
  121.   textFont : gfx.TextFontPtr;
  122.   textAttr : ARRAY 2 OF gfx.TextAttr;
  123.   settingsDlg : SettingsDialog;
  124.   hSpace, vSpace : LONGINT;
  125.   tags1, tags2 : ARRAY 2 OF u.TagItem;
  126.  
  127.  
  128. (* ---------------------------------- *)
  129. PROCEDURE Notice* ( msg : LONGINT );
  130.  
  131.   VAR es : i.EasyStruct; text : e.LSTRPTR;
  132.  
  133.   BEGIN (* Notice *)
  134.     es.structSize := SIZE (i.EasyStruct);
  135.     es.flags := {};
  136.     es.title := cat.GetString (cat.gui1);
  137.     es.gadgetFormat := cat.GetString (cat.gui2);
  138.     es.textFormat := SYS.ADR ("%s");
  139.     text := cat.GetString (msg);
  140.     IF i.EasyRequest ( NIL, SYS.ADR (es), NIL, text ) = 0
  141.     THEN
  142.     END
  143.   END Notice;
  144.  
  145. (* ---------------------------------- *)
  146. PROCEDURE Notice1* ( fmt : LONGINT; msg : ARRAY OF CHAR );
  147.  
  148.   VAR es : i.EasyStruct; text : e.LSTRPTR;
  149.  
  150.   <*$CopyArrays-*>
  151.   BEGIN (* Notice1 *)
  152.     es.structSize := SIZE (i.EasyStruct);
  153.     es.flags := {};
  154.     es.title := cat.GetString (cat.gui1);
  155.     es.gadgetFormat := cat.GetString (cat.gui2);
  156.     es.textFormat := cat.GetString (fmt);
  157.     IF i.EasyRequest ( NIL, SYS.ADR (es), NIL, SYS.ADR (msg) ) = 0
  158.     THEN
  159.     END
  160.   END Notice1;
  161.  
  162. (* ---------------------------------- *)
  163. PROCEDURE RequestFile
  164.   ( window     : i.WindowPtr;
  165.     title      : ARRAY OF CHAR;
  166.     pattern    : ARRAY OF CHAR;
  167.     VAR drawer : ARRAY OF CHAR;
  168.     VAR file   : ARRAY OF CHAR;
  169.     save       : BOOLEAN )
  170.   : BOOLEAN;
  171.  
  172.   VAR
  173.     fr : ASL.FileRequesterPtr;
  174.     flags : s.SET32;
  175.     result : BOOLEAN;
  176.  
  177.   <*$CopyArrays-*>
  178.   BEGIN (* RequestFile *)
  179.     IF save THEN flags := {ASL.frDoPatterns, ASL.frDoSaveMode}
  180.     ELSE flags := {ASL.frDoPatterns}
  181.     END;
  182.     fr := SYS.VAL (ASL.FileRequesterPtr,
  183.       ASL.AllocAslRequestTags ( ASL.fileRequest,
  184.           ASL.window,         window,
  185.           ASL.titleText,      SYS.ADR (title),
  186.           ASL.initialDrawer,  SYS.ADR (drawer),
  187.           ASL.initialFile,    SYS.ADR (file),
  188.           ASL.initialPattern, SYS.ADR (pattern),
  189.           ASL.flags1,         flags,
  190.           ASL.flags2,         {ASL.frRejectIcons},
  191.           u.end ));
  192.     IF fr # NIL THEN
  193.       result := ASL.AslRequestTags (fr, u.end);
  194.       IF result THEN
  195.         COPY (fr.drawer^, drawer);
  196.         COPY (fr.file^, file)
  197.       END;
  198.       ASL.FreeAslRequest (fr)
  199.     ELSE
  200.       result := FALSE
  201.     END;
  202.  
  203.     RETURN result
  204.   END RequestFile;
  205.  
  206. (*------------------------------------*)
  207. PROCEDURE MakeIcon ( file : ARRAY OF CHAR );
  208.  
  209.   CONST defPrefsIcon = "def_prefs";
  210.  
  211.   VAR
  212.     icon    : ARRAY 256 OF CHAR;
  213.     diskObj : wb.DiskObjectPtr;
  214.     oldTool : e.LSTRPTR;
  215.  
  216.   <*$CopyArrays-*>
  217.   BEGIN (* MakeIcon *)
  218.     ASSERT (Icon.base # NIL, 100);
  219.     COPY (file, icon); str.Append (".info", icon);
  220.     IF ~du.FileExists (icon) THEN
  221.       diskObj := Icon.GetDiskObject ("ENV:OCPrefs/def_prefs");
  222.       IF diskObj = NIL THEN
  223.         diskObj := Icon.GetDefDiskObject (wb.project)
  224.       END;
  225.       IF diskObj # NIL THEN
  226.         oldTool := diskObj.defaultTool;
  227.         diskObj.defaultTool := SYS.ADR ("OCPrefs");
  228.         diskObj.currentX := wb.noIconPosition;
  229.         diskObj.currentY := wb.noIconPosition;
  230.         IF ~Icon.PutDiskObject (file, diskObj) THEN
  231.           Notice1 (cat.gui42, icon)
  232.         END;
  233.         diskObj.defaultTool := oldTool;
  234.         Icon.FreeDiskObject (diskObj)
  235.       ELSE
  236.         Notice (cat.gui43)
  237.       END
  238.     END
  239.   END MakeIcon;
  240.  
  241. (* ---------------------------------- *)
  242. PROCEDURE (dlg : SettingsDialog) SetAttrs;
  243.  
  244.   VAR node : e.NodePtr; label : e.LSTRPTR; x : INTEGER;
  245.  
  246.   BEGIN (* SetAttrs *)
  247.     gt.SetGadgetAttrs ( dlg.gadget[PrefsFileID]^, dlg.win, NIL,
  248.         gt.txText, SYS.ADR (OCM.PrefsFile),
  249.         u.done );
  250.  
  251.     gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  252.         gt.lvLabels, NIL,
  253.         u.done );
  254.     IF dlg.pathLabels = NIL THEN
  255.       NEW (dlg.pathLabels);
  256.       es.NewList (dlg.pathLabels^)
  257.     ELSE
  258.       LOOP
  259.         node := SYS.VAL (e.NodePtr, e.RemHead (dlg.pathLabels^));
  260.         IF node = NIL THEN EXIT END;
  261.         SYS.DISPOSE (node.name);
  262.         SYS.DISPOSE (node)
  263.       END
  264.     END;
  265.     FOR x := 0 TO OCM.pathx - 1 DO
  266.       SYS.NEW (label, str.Length (OCM.searchPath[x]^) + 1);
  267.       COPY (OCM.searchPath[x]^, label^);
  268.       NEW (node); node.name := label;
  269.       e.AddTail (dlg.pathLabels^, node)
  270.     END;
  271.     gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  272.         gt.lvLabels, dlg.pathLabels,
  273.         gt.lvTop,    0,
  274.         u.done );
  275.  
  276.     gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  277.         gt.stString,   NIL,
  278.         i.gaDisabled, TRUE,
  279.         u.done );
  280.     dlg.selectedPath := -1;
  281.  
  282.     gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  283.         i.gaDisabled, TRUE,
  284.         u.done );
  285.  
  286.     gt.SetGadgetAttrs ( dlg.gadget[SymPathID]^, dlg.win, NIL,
  287.         gt.stString, SYS.ADR (OCM.SymPath),
  288.         u.done );
  289.     gt.SetGadgetAttrs ( dlg.gadget[SymExtID]^, dlg.win, NIL,
  290.         gt.stString, SYS.ADR (OCM.SymExt),
  291.         u.done );
  292.     gt.SetGadgetAttrs ( dlg.gadget[ObjPathID]^, dlg.win, NIL,
  293.         gt.stString, SYS.ADR (OCM.ObjPath),
  294.         u.done );
  295.     gt.SetGadgetAttrs ( dlg.gadget[ObjExtID]^, dlg.win, NIL,
  296.         gt.stString, SYS.ADR (OCM.ObjExt),
  297.         u.done );
  298.     gt.SetGadgetAttrs ( dlg.gadget[ErrPathID]^, dlg.win, NIL,
  299.         gt.stString, SYS.ADR (OCM.ErrPath),
  300.         u.done );
  301.     gt.SetGadgetAttrs ( dlg.gadget[ErrExtID]^, dlg.win, NIL,
  302.         gt.stString, SYS.ADR (OCM.ErrExt),
  303.         u.done );
  304.  
  305.     gt.SetGadgetAttrs ( dlg.gadget[VerboseID]^, dlg.win, NIL,
  306.         gt.cbChecked, OCM.Verbose,
  307.         u.done );
  308.     gt.SetGadgetAttrs ( dlg.gadget[MakeIconsID]^, dlg.win, NIL,
  309.         gt.cbChecked, OCM.MakeIcons,
  310.         u.done );
  311.  
  312.     gt.SetGadgetAttrs ( dlg.gadget[SetNamesID]^, dlg.win, NIL,
  313.         gt.stString, SYS.ADR (OCM.SetNames),
  314.         u.done );
  315.     gt.SetGadgetAttrs ( dlg.gadget[ClearNamesID]^, dlg.win, NIL,
  316.         gt.stString, SYS.ADR (OCM.ClearNames),
  317.         u.done );
  318.     gt.SetGadgetAttrs ( dlg.gadget[CodeSizeID]^, dlg.win, NIL,
  319.         gt.inNumber, OCM.CodeSize,
  320.         u.done );
  321.     gt.SetGadgetAttrs ( dlg.gadget[ConstSizeID]^, dlg.win, NIL,
  322.         gt.inNumber, OCM.ConstSize,
  323.         u.done );
  324.   END SetAttrs;
  325.  
  326. (* ---------------------------------- *)
  327. PROCEDURE (dlg : OptionsDialog) SetAttrs;
  328.  
  329.   BEGIN (* SetAttrs *)
  330.     gt.SetGadgetAttrs ( dlg.gadget[StandardID]^, dlg.win, NIL,
  331.         gt.cbChecked, OCM.Standard,
  332.         u.done );
  333.     gt.SetGadgetAttrs ( dlg.gadget[InitialiseID]^, dlg.win, NIL,
  334.         gt.cbChecked, OCM.Initialise,
  335.         u.done );
  336.     gt.SetGadgetAttrs ( dlg.gadget[MainID]^, dlg.win, NIL,
  337.         gt.cbChecked, OCM.Main,
  338.         u.done );
  339.     gt.SetGadgetAttrs ( dlg.gadget[WarningsID]^, dlg.win, NIL,
  340.         gt.cbChecked, OCM.Warnings,
  341.         u.done );
  342.     gt.SetGadgetAttrs ( dlg.gadget[RegisterID]^, dlg.win, NIL,
  343.         gt.cbChecked, OCM.Register,
  344.         u.done );
  345.     gt.SetGadgetAttrs ( dlg.gadget[DebugID]^, dlg.win, NIL,
  346.         gt.cbChecked, OCM.Debug,
  347.         u.done );
  348.     gt.SetGadgetAttrs ( dlg.gadget[SmallCodeID]^, dlg.win, NIL,
  349.         gt.cbChecked, OCM.SmallCode,
  350.         u.done );
  351.     gt.SetGadgetAttrs ( dlg.gadget[SmallDataID]^, dlg.win, NIL,
  352.         gt.cbChecked, OCM.SmallData,
  353.         u.done );
  354.     gt.SetGadgetAttrs ( dlg.gadget[ResidentID]^, dlg.win, NIL,
  355.         gt.cbChecked, OCM.Resident,
  356.         u.done );
  357.  
  358.     gt.SetGadgetAttrs ( dlg.gadget[TypeChkID]^, dlg.win, NIL,
  359.         gt.cbChecked, OCM.TypeChk,
  360.         u.done );
  361.     gt.SetGadgetAttrs ( dlg.gadget[OvflChkID]^, dlg.win, NIL,
  362.         gt.cbChecked, OCM.OvflChk,
  363.         u.done );
  364.     gt.SetGadgetAttrs ( dlg.gadget[IndexChkID]^, dlg.win, NIL,
  365.         gt.cbChecked, OCM.IndexChk,
  366.         u.done );
  367.     gt.SetGadgetAttrs ( dlg.gadget[RangeChkID]^, dlg.win, NIL,
  368.         gt.cbChecked, OCM.RangeChk,
  369.         u.done );
  370.     gt.SetGadgetAttrs ( dlg.gadget[CaseChkID]^, dlg.win, NIL,
  371.         gt.cbChecked, OCM.CaseChk,
  372.         u.done );
  373.     gt.SetGadgetAttrs ( dlg.gadget[NilChkID]^, dlg.win, NIL,
  374.         gt.cbChecked, OCM.NilChk,
  375.         u.done );
  376.     gt.SetGadgetAttrs ( dlg.gadget[ReturnChkID]^, dlg.win, NIL,
  377.         gt.cbChecked, OCM.ReturnChk,
  378.         u.done );
  379.     gt.SetGadgetAttrs ( dlg.gadget[StackChkID]^, dlg.win, NIL,
  380.         gt.cbChecked, OCM.StackChk,
  381.         u.done );
  382.     gt.SetGadgetAttrs ( dlg.gadget[LongVarsID]^, dlg.win, NIL,
  383.         gt.cbChecked, OCM.LongVars,
  384.         u.done );
  385.     gt.SetGadgetAttrs ( dlg.gadget[ClearVarsID]^, dlg.win, NIL,
  386.         gt.cbChecked, OCM.ClearVars,
  387.         u.done );
  388.     gt.SetGadgetAttrs ( dlg.gadget[AssertChkID]^, dlg.win, NIL,
  389.         gt.cbChecked, OCM.AssertChk,
  390.         u.done );
  391.   END SetAttrs;
  392.  
  393. (* ---------------------------------- *)
  394. PROCEDURE (dlg : SettingsDialog) GetAttrs;
  395.  
  396.   VAR stringInfo : i.StringInfoPtr; node : e.NodePtr;
  397.  
  398.   PROCEDURE GetString ( gad : i.GadgetPtr; VAR str : ARRAY OF CHAR );
  399.  
  400.     VAR stringInfo : i.StringInfoPtr;
  401.  
  402.     BEGIN (* GetString *)
  403.       stringInfo := SYS.VAL (i.StringInfoPtr, gad.specialInfo);
  404.       COPY (stringInfo.buffer^, str);
  405.     END GetString;
  406.  
  407.   BEGIN (* GetAttrs *)
  408.     OCM.ClearSearchPaths;
  409.     gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  410.         gt.lvLabels, gt.noList,
  411.         u.done );
  412.     LOOP
  413.       node := SYS.VAL (e.NodePtr, e.RemHead (dlg.pathLabels^));
  414.       IF node = NIL THEN EXIT END;
  415.       OCM.AddSearchPath (node.name);
  416.       SYS.DISPOSE (node)
  417.     END; (* LOOP *)
  418.     GetString (dlg.gadget[SymPathID], OCM.SymPath);
  419.     GetString (dlg.gadget[SymExtID], OCM.SymExt);
  420.     GetString (dlg.gadget[ObjPathID], OCM.ObjPath);
  421.     GetString (dlg.gadget[ObjExtID], OCM.ObjExt);
  422.     GetString (dlg.gadget[ErrPathID], OCM.ErrPath);
  423.     GetString (dlg.gadget[ErrExtID], OCM.ErrExt);
  424.     GetString (dlg.gadget[SetNamesID], OCM.SetNames);
  425.     GetString (dlg.gadget[ClearNamesID], OCM.ClearNames);
  426.  
  427.     OCM.Verbose := (i.selected IN dlg.gadget[VerboseID].flags);
  428.     OCM.MakeIcons := (i.selected IN dlg.gadget[MakeIconsID].flags);
  429.  
  430.     stringInfo :=
  431.       SYS.VAL (i.StringInfoPtr, dlg.gadget[CodeSizeID].specialInfo);
  432.     OCM.CodeSize := stringInfo.longInt;
  433.     stringInfo :=
  434.       SYS.VAL (i.StringInfoPtr, dlg.gadget[ConstSizeID].specialInfo);
  435.     OCM.ConstSize := stringInfo.longInt;
  436.   END GetAttrs;
  437.  
  438. (* ---------------------------------- *)
  439. PROCEDURE (dlg : OptionsDialog) GetAttrs;
  440.  
  441.   BEGIN (* GetAttrs *)
  442.     OCM.Standard := (i.selected IN dlg.gadget[StandardID].flags);
  443.     OCM.Initialise := (i.selected IN dlg.gadget[InitialiseID].flags);
  444.     OCM.Main := (i.selected IN dlg.gadget[MainID].flags);
  445.     OCM.Warnings := (i.selected IN dlg.gadget[WarningsID].flags);
  446.     OCM.Register := (i.selected IN dlg.gadget[RegisterID].flags);
  447.     OCM.Debug := (i.selected IN dlg.gadget[DebugID].flags);
  448.     OCM.SmallCode := (i.selected IN dlg.gadget[SmallCodeID].flags);
  449.     OCM.SmallData := (i.selected IN dlg.gadget[SmallDataID].flags);
  450.     OCM.Resident := (i.selected IN dlg.gadget[ResidentID].flags);
  451.  
  452.     OCM.TypeChk := (i.selected IN dlg.gadget[TypeChkID].flags);
  453.     OCM.OvflChk := (i.selected IN dlg.gadget[OvflChkID].flags);
  454.     OCM.IndexChk := (i.selected IN dlg.gadget[IndexChkID].flags);
  455.     OCM.RangeChk := (i.selected IN dlg.gadget[RangeChkID].flags);
  456.     OCM.CaseChk := (i.selected IN dlg.gadget[CaseChkID].flags);
  457.     OCM.NilChk := (i.selected IN dlg.gadget[NilChkID].flags);
  458.     OCM.ReturnChk := (i.selected IN dlg.gadget[ReturnChkID].flags);
  459.     OCM.StackChk := (i.selected IN dlg.gadget[StackChkID].flags);
  460.     OCM.AssertChk := (i.selected IN dlg.gadget[AssertChkID].flags);
  461.     OCM.ClearVars := (i.selected IN dlg.gadget[ClearVarsID].flags);
  462.     OCM.LongVars := (i.selected IN dlg.gadget[LongVarsID].flags);
  463.   END GetAttrs;
  464.  
  465. (* ---------------------------------- *)
  466. PROCEDURE (dlg : SettingsDialog) SetupWindow ( win : i.WindowPtr );
  467.   BEGIN (* SetupWindow *)
  468.     dlg.SetupWindow^ (win);
  469.     dlg.SetAttrs
  470.   END SetupWindow;
  471.  
  472. (* ---------------------------------- *)
  473. PROCEDURE (dlg : OptionsDialog) SetupWindow ( win : i.WindowPtr );
  474.   BEGIN (* SetupWindow *)
  475.     dlg.SetupWindow^ (win);
  476.     dlg.SetAttrs
  477.   END SetupWindow;
  478.  
  479. (* ---------------------------------- *)
  480. PROCEDURE (dlg : SettingsDialog) HandleGadgetUp
  481.   ( msg : i.IntuiMessagePtr )
  482.   : INTEGER;
  483.  
  484.   VAR
  485.     result, gadgetID : INTEGER;
  486.     gadget : i.GadgetPtr;
  487.     stringInfo : i.StringInfoPtr;
  488.     buffer : e.LSTRPTR;
  489.     code : INTEGER;
  490.     node : e.NodePtr;
  491.  
  492.   (* ---------------------------------- *)
  493.   PROCEDURE DoAbout;
  494.  
  495.     VAR es : i.EasyStruct;
  496.  
  497.     BEGIN (* DoAbout *)
  498.       dlg.Block;
  499.       es.structSize := SIZE (i.EasyStruct);
  500.       es.flags := {};
  501.       es.title := cat.GetString (cat.gui4);
  502.       es.gadgetFormat := cat.GetString (cat.gui2);
  503.       es.textFormat := SYS.ADR ("%s (%s)\n%s");
  504.       IF 0 = i.EasyRequest ( NIL, SYS.ADR (es), NIL,
  505.           SYS.ADR (OCPrefsRev.vers), SYS.ADR (OCPrefsRev.date),
  506.           cat.GetString (cat.gui5),
  507.           NIL )
  508.       THEN
  509.       END;
  510.       dlg.UnBlock
  511.     END DoAbout;
  512.  
  513.   (* ---------------------------------- *)
  514.   PROCEDURE DoBrowse;
  515.  
  516.     VAR
  517.       drawer : ARRAY 256 OF CHAR; file : ARRAY 32 OF CHAR;
  518.       str : e.LSTRPTR;
  519.  
  520.     BEGIN (* DoBrowse *)
  521.       COPY (OCM.PrefsFile, drawer);
  522.       str := d.PathPart (drawer);
  523.       str[0] := 0X;
  524.  
  525.       str := d.FilePart (OCM.PrefsFile);
  526.       COPY (str^, file);
  527.  
  528.       dlg.Block;
  529.       str := cat.GetString (cat.gui13);
  530.       IF RequestFile ( dlg.win, str^, "#?.prefs",
  531.                        drawer, file, FALSE )
  532.       THEN
  533.         IF d.AddPart (drawer, file, LEN (drawer))
  534.          & OCM.LoadPrefs (drawer) THEN
  535.           dlg.SetAttrs
  536.         ELSE
  537.           Notice (cat.gui14)
  538.         END
  539.       END;
  540.       dlg.UnBlock
  541.     END DoBrowse;
  542.  
  543.   (* ---------------------------------- *)
  544.   PROCEDURE DoSaveAs;
  545.  
  546.     VAR
  547.       drawer : ARRAY 256 OF CHAR; file : ARRAY 32 OF CHAR;
  548.       str : e.LSTRPTR;
  549.  
  550.     BEGIN (* DoSaveAs *)
  551.       COPY (OCM.PrefsFile, drawer);
  552.       str := d.PathPart (drawer);
  553.       str[0] := 0X;
  554.  
  555.       str := d.FilePart (OCM.PrefsFile);
  556.       COPY (str^, file);
  557.  
  558.       dlg.Block;
  559.       str := cat.GetString (cat.gui13);
  560.       IF RequestFile ( dlg.win, str^, "#?.prefs",
  561.                        drawer, file, TRUE )
  562.       THEN
  563.         dlg.GetAttrs;
  564.         IF ( d.AddPart (drawer, file, LEN (drawer))
  565.              & OCM.SavePrefs (drawer) )
  566.         THEN
  567.           gt.SetGadgetAttrs ( dlg.gadget[PrefsFileID]^, dlg.win, NIL,
  568.               gt.txText, SYS.ADR (OCM.PrefsFile),
  569.               u.done );
  570.           MakeIcon (drawer)
  571.         ELSE
  572.           Notice (cat.gui15)
  573.         END
  574.       END;
  575.       dlg.UnBlock;
  576.     END DoSaveAs;
  577.  
  578.   BEGIN (* HandleGadgetUp *)
  579.     result := Events.Continue;
  580.  
  581.     code := msg.code;
  582.     gadget := msg.iAddress;
  583.     gt.ReplyIMsg (msg);
  584.  
  585.     gadgetID := gadget.gadgetID;
  586.     CASE gadgetID OF
  587.       BrowseID:
  588.         DoBrowse
  589.     |
  590.       AboutID:
  591.         DoAbout
  592.     |
  593.       SaveID:
  594.         dlg.GetAttrs;
  595.         IF OCM.SavePrefs (OCM.PrefsFile) THEN
  596.           MakeIcon (OCM.PrefsFile)
  597.         ELSE
  598.           dlg.Block;
  599.           Notice (cat.gui15);
  600.           dlg.UnBlock
  601.         END
  602.     |
  603.       SaveAsID:
  604.         DoSaveAs()
  605.     |
  606.       QuitID:
  607.         result := Events.Stop
  608.     |
  609.       PathID:
  610.         node := SYS.VAL (e.NodePtr, eu.NodeAt (dlg.pathLabels^, code));
  611.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  612.             gt.stString,   node.name,
  613.             i.gaDisabled, FALSE,
  614.             u.done );
  615.         IF i.ActivateGadget ( dlg.gadget[PathStrID]^, dlg.win, NIL ) THEN END;
  616.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  617.             i.gaDisabled, FALSE,
  618.             u.done );
  619.         dlg.selectedPath := code
  620.     |
  621.       PathStrID:
  622.         stringInfo := SYS.VAL (i.StringInfoPtr, gadget.specialInfo);
  623.         buffer := stringInfo.buffer;
  624.         IF (buffer # NIL) & (buffer^ # "") THEN
  625.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  626.               gt.lvLabels, gt.noList,
  627.               u.done );
  628.           IF dlg.selectedPath >= 0 THEN
  629.             node := SYS.VAL ( e.NodePtr,
  630.                 eu.NodeAt (dlg.pathLabels^, dlg.selectedPath) );
  631.             SYS.DISPOSE (node.name)
  632.           ELSE
  633.             NEW (node);
  634.             e.AddTail (dlg.pathLabels^, node)
  635.           END;
  636.           SYS.NEW (node.name, str.Length (buffer^) + 1);
  637.           COPY (buffer^, node.name^);
  638.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  639.               gt.lvLabels, dlg.pathLabels,
  640.               u.done )
  641.         END;
  642.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  643.             gt.stString,   NIL,
  644.             i.gaDisabled, TRUE,
  645.             u.done );
  646.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  647.             i.gaDisabled, TRUE,
  648.             u.done );
  649.         dlg.selectedPath := -1
  650.     |
  651.       AddID:
  652.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  653.             gt.stString,   NIL,
  654.             i.gaDisabled, FALSE,
  655.             u.done );
  656.         IF i.ActivateGadget ( dlg.gadget[PathStrID]^, dlg.win, NIL ) THEN END;
  657.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  658.             i.gaDisabled, FALSE,
  659.             u.done );
  660.         dlg.selectedPath := -1
  661.     |
  662.       DeleteID:
  663.         IF dlg.selectedPath >= 0 THEN
  664.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  665.               gt.lvLabels, gt.noList,
  666.               u.done );
  667.           node := SYS.VAL ( e.NodePtr,
  668.               eu.NodeAt (dlg.pathLabels^, dlg.selectedPath) );
  669.           e.Remove (node);
  670.           SYS.DISPOSE (node.name);
  671.           SYS.DISPOSE (node);
  672.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  673.               gt.lvLabels, dlg.pathLabels,
  674.               u.done )
  675.         END;
  676.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  677.             gt.stString,   NIL,
  678.             i.gaDisabled, TRUE,
  679.             u.done );
  680.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  681.             i.gaDisabled, TRUE,
  682.             u.done );
  683.         dlg.selectedPath := -1
  684.     |
  685.       MoreID:
  686.         IF dlg.optionsDlg = NIL THEN NEW (dlg.optionsDlg) END;
  687.         dlg.Block;
  688.         IF dlg.optionsDlg.Open (visualInfo, drawInfo) THEN
  689.           Events.SimpleLoop (dlg.optionsDlg, Events.NoGC);
  690.           dlg.optionsDlg.Close
  691.         ELSE
  692.           Errors.Abort ("Failed to open Options Dialog")
  693.         END;
  694.         dlg.UnBlock;
  695.     ELSE (* NOP *)
  696.     END;
  697.  
  698.     RETURN result
  699.   END HandleGadgetUp;
  700.  
  701. (* ---------------------------------- *)
  702. PROCEDURE (dlg : OptionsDialog) HandleGadgetUp
  703.   ( msg : i.IntuiMessagePtr )
  704.   : INTEGER;
  705.  
  706.   VAR
  707.     result : INTEGER;
  708.     gadget : i.GadgetPtr;
  709.  
  710.   BEGIN (* HandleGadgetUp *)
  711.     result := Events.Continue;
  712.  
  713.     gadget := msg.iAddress;
  714.     gt.ReplyIMsg (msg);
  715.  
  716.     CASE gadget.gadgetID OF
  717.       SmallDataID:
  718.         IF i.selected IN dlg.gadget[SmallDataID].flags THEN
  719.           gt.SetGadgetAttrs ( dlg.gadget[ResidentID]^, dlg.win, NIL,
  720.               gt.cbChecked, FALSE,
  721.               u.done )
  722.         END
  723.     |
  724.       ResidentID:
  725.         IF i.selected IN dlg.gadget[ResidentID].flags THEN
  726.           gt.SetGadgetAttrs ( dlg.gadget[SmallDataID]^, dlg.win, NIL,
  727.               gt.cbChecked, FALSE,
  728.               u.done )
  729.         END
  730.     |
  731.       AcceptID:
  732.         dlg.GetAttrs;
  733.         result := Events.Stop
  734.     |
  735.       CancelID:
  736.         result := Events.Stop
  737.     ELSE (* Oops... *)
  738.     END;
  739.  
  740.     RETURN result
  741.   END HandleGadgetUp;
  742.  
  743. (* ---------------------------------- *)
  744. PROCEDURE (dlg : SettingsDialog) InitObjects () : BOOLEAN;
  745.  
  746.   CONST
  747.     template1 = "000000000000";
  748.     template2 = "000000";
  749.     template3 = "0000000000000000000000000000";
  750.  
  751.   VAR
  752.     obj : ARRAY 15 OF ea.OPTR; obj2 : ARRAY 14 OF ea.OPTR;
  753.     x, w1, w2, w3, ignore, hPlus2, vPlus1, vDiv2 : LONGINT;
  754.     gad : ARRAY NumGadgets1 OF SYS.ADDRESS; ta : SYS.ADDRESS;
  755.     txt : ARRAY 11 OF e.LSTRPTR; tags : ARRAY 2 OF u.TagItem;
  756.  
  757.   PROCEDURE StringGroup1
  758.     ( title     : e.LSTRPTR;
  759.       gadget1,
  760.       gadget2   : SYS.ADDRESS )
  761.     : ea.OPTR;
  762.  
  763.     BEGIN (* StringGroup1 *)
  764.       RETURN eam.HGroup (
  765.           ea.Child,        eam.EmptyBox (1, u.done),
  766.           ea.Child,        eam.GTString ( title,
  767.               ea.GTTagList,       SYS.ADR (tags1),
  768.               ea.InstanceAddress, gadget1,
  769.               ea.MinWidth,        w1 + 10,
  770.               u.done ),
  771.           ea.Child,        eam.GTString ( NIL,
  772.               ea.GTTagList,       SYS.ADR (tags2),
  773.               ea.InstanceAddress, gadget2,
  774.               ea.MinWidth,        w2 + 10,
  775.               u.done ),
  776.           u.done );
  777.     END StringGroup1;
  778.  
  779.   PROCEDURE StringGroup2
  780.     ( title     : e.LSTRPTR;
  781.       gadget    : SYS.ADDRESS )
  782.     : ea.OPTR;
  783.  
  784.     BEGIN (* StringGroup2 *)
  785.       RETURN eam.HGroup (
  786.           ea.Child, eam.EmptyBox (1, u.done),
  787.           ea.Child, eam.GTString ( title,
  788.               ea.GTTagList,       SYS.ADR (tags1),
  789.               ea.InstanceAddress, gadget,
  790.               ea.MinWidth,        w3 + 10,
  791.               u.done ),
  792.           u.done );
  793.     END StringGroup2;
  794.  
  795.   PROCEDURE IntegerGroup
  796.     ( title     : e.LSTRPTR;
  797.       gadget    : SYS.ADDRESS )
  798.     : ea.OPTR;
  799.  
  800.     BEGIN (* IntegerGroup *)
  801.       RETURN eam.HGroup (
  802.           ea.Child, eam.EmptyBox (1, u.done),
  803.           ea.Child, eam.GTInteger ( title,
  804.               ea.InstanceAddress, gadget,
  805.               ea.MinWidth,        w2 + 10,
  806.               u.done ),
  807.           u.done );
  808.     END IntegerGroup;
  809.  
  810.   BEGIN
  811.     FOR x := 0 TO NumGadgets1 - 1 DO
  812.       gad[x] := SYS.ADR (dlg.gadget[x])
  813.     END;
  814.     ta := SYS.ADR (textAttr[0]);
  815.  
  816.     w1 := ea.TextLength (textAttr[0], template1, 0X);
  817.     w2 := ea.TextLength (textAttr[0], template2, 0X);
  818.     w3 := ea.TextLength (textAttr[0], template3, 0X);
  819.  
  820.     hPlus2 := hSpace + 2;
  821.     vPlus1 := vSpace + 1;
  822.     vDiv2 := vSpace DIV 2;
  823.  
  824.     (* set up some defaults for all objects *)
  825.     ignore := ea.SetAttr ( NIL, ea.DefGTTextAttr, ta );
  826.  
  827.     (* build the object tree *)
  828.     obj[0] := eam.HGroup (
  829.         ea.BorderLeft,   hSpace,
  830.         ea.BorderRight,  2,
  831.         ea.BorderTop,    1,
  832.         ea.BorderBottom, 1,
  833.         ea.Child,        frm.NewFrame ( dlg.frame[0], u.done ),
  834.         ea.Child,        lbl.NewLabel ( dlg.label[0],
  835.             ea.BorderTop,   1,
  836.             ea.BorderRight, hSpace,
  837.             u.done ),
  838.         ea.Child, eam.GTText ( NIL,
  839.             ea.InstanceAddress, gad[PrefsFileID],
  840.             ea.Weight,          1,
  841.             u.done ),
  842.         ea.Child, eam.GTButton ( SYS.ADR ("..."),
  843.             ea.ID,              BrowseID,
  844.             u.done ),
  845.         u.done );
  846.     frm.InitFrame ( dlg.frame[0],
  847.         {frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  848.     lbl.InitLabel ( dlg.label[0], cat.GetString (cat.gui16),
  849.         ta, gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  850.  
  851.     obj[1] := eam.GTButton ( cat.GetString (cat.gui17),
  852.         ea.ID,           AddID,
  853.         ea.Weight,       1,
  854.         u.done );
  855.     obj[2] := eam.GTButton ( cat.GetString (cat.gui18),
  856.         ea.InstanceAddress, gad[DeleteID],
  857.         ea.ID,              DeleteID,
  858.         ea.Weight,          1,
  859.         u.done );
  860.     obj[3] := eam.HGroup (
  861.         ea.Child,     obj[1],
  862.         ea.Child,     obj[2],
  863.         u.done );
  864.     ignore := ea.NewRelation ( obj[3], spt.SameSizeHook,
  865.         ea.Object, obj[1],
  866.         ea.Object, obj[2],
  867.         u.done );
  868.  
  869.     obj[4] := eam.VGroup (
  870.         ea.BorderLeft,   hSpace,
  871.         ea.BorderRight,  hSpace,
  872.         ea.BorderTop,    vSpace,
  873.         ea.BorderBottom, vSpace,
  874.         (* ea.Weight,       1, *)
  875.         ea.Child,        frm.NewFrame ( dlg.frame[1], u.done ),
  876.         ea.Child,        lbl.NewLabel ( dlg.label[1],
  877.             ea.BorderBottom, vDiv2,
  878.             u.done ),
  879.         ea.Child,        eam.GTListView ( NIL,
  880.             ea.MinWidth,        w1 + 20,
  881.             ea.Weight,          1,
  882.             ea.InstanceAddress, gad[PathID],
  883.             ea.ID,              PathID,
  884.             u.done ),
  885.         ea.Child,        eam.GTString ( NIL,
  886.             ea.GTTagList,       SYS.ADR (tags1),
  887.             ea.InstanceAddress, gad[PathStrID],
  888.             ea.ID,              PathStrID,
  889.             u.done ),
  890.         ea.Child,        obj[3],
  891.         u.done );
  892.     frm.InitFrame ( dlg.frame[1],
  893.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  894.     lbl.InitLabel ( dlg.label[1],
  895.         cat.GetString (cat.gui19), ta,
  896.         gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  897.  
  898.     obj[5] := eam.VGroup (
  899.         ea.BorderLeft,   hSpace,
  900.         ea.BorderRight,  hSpace,
  901.         ea.BorderTop,    vSpace,
  902.         ea.BorderBottom, vSpace,
  903.         ea.Child,        frm.NewFrame ( dlg.frame[2], u.done ),
  904.         ea.Child,        lbl.NewLabel ( dlg.label[2],
  905.             ea.BorderBottom, vDiv2,
  906.             u.done ),
  907.         ea.Child,        eam.HGroup (
  908.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  909.             ea.Child,        eam.VGroup (
  910.                 ea.Child,        StringGroup1 ( cat.GetString (cat.gui20),
  911.                     gad[SymPathID], gad[SymExtID] ),
  912.                 ea.Child,        StringGroup1 ( cat.GetString (cat.gui21),
  913.                     gad[ObjPathID], gad[ObjExtID] ),
  914.                 ea.Child,        StringGroup1 ( cat.GetString (cat.gui22),
  915.                     gad[ErrPathID], gad[ErrExtID] ),
  916.                 u.done ),
  917.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  918.             u.done ),
  919.         u.done );
  920.     frm.InitFrame ( dlg.frame[2],
  921.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  922.     lbl.InitLabel ( dlg.label[2],
  923.         cat.GetString (cat.gui23), ta,
  924.         gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  925.  
  926.     obj[6] := eam.VGroup (
  927.         ea.BorderLeft,   hSpace,
  928.         ea.BorderRight,  hSpace,
  929.         ea.BorderTop,    vSpace,
  930.         ea.BorderBottom, vSpace,
  931.         ea.Child,        frm.NewFrame ( dlg.frame[3], u.done ),
  932.         ea.Child,        lbl.NewLabel ( dlg.label[3],
  933.             ea.BorderBottom, vDiv2,
  934.             u.done ),
  935.         ea.Child,        eam.HGroup (
  936.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  937.             ea.Child,        eam.VGroup (
  938.                 ea.Child,        StringGroup2 ( cat.GetString (cat.gui31), gad[SetNamesID] ),
  939.                 ea.Child,        StringGroup2 ( cat.GetString (cat.gui32), gad[ClearNamesID] ),
  940.                 u.done ),
  941.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  942.             u.done ),
  943.         u.done );
  944.     frm.InitFrame ( dlg.frame[3],
  945.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  946.     lbl.InitLabel ( dlg.label[3], cat.GetString (cat.gui33), ta,
  947.         gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  948.  
  949.     txt[0] := SYS.ADR ("Verbose");
  950.     txt[1] := SYS.ADR ("Make Icons");
  951.  
  952.     obj2[0] := eam.GTCheckBox ( txt[0],
  953.         ea.GTFlags,         {gt.placeTextRight},
  954.         ea.InstanceAddress, gad[VerboseID],
  955.         ea.ID,              VerboseID,
  956.         u.done );
  957.     obj2[1] := eam.GTCheckBox ( txt[1],
  958.         ea.GTFlags,         {gt.placeTextRight},
  959.         ea.InstanceAddress, gad[MakeIconsID],
  960.         ea.ID,              MakeIconsID,
  961.         u.done );
  962.  
  963.     obj[7] := eam.VGroup (
  964.         ea.BorderLeft,   hSpace,
  965.         ea.BorderRight,  hSpace,
  966.         ea.BorderTop,    vSpace,
  967.         ea.BorderBottom, vSpace,
  968.         ea.Child, frm.NewFrame ( dlg.frame[4], u.done ),
  969.         ea.Child, lbl.NewLabel ( dlg.label[4],
  970.             ea.BorderBottom, vDiv2,
  971.             u.done ),
  972.         ea.Child, obj2[0],
  973.         ea.Child, obj2[1],
  974.         u.done );
  975.     frm.InitFrame ( dlg.frame[4], {frm.DoubleBorder, frm.Recessed},
  976.                     dlg.visualInfo, dlg.drawInfo );
  977.     lbl.InitLabel ( dlg.label[4],
  978.         cat.GetString (cat.gui24), ta, gfx.jam2,
  979.         {lbl.ShadowText}, dlg.drawInfo );
  980.  
  981.     obj[8] := eam.VGroup (
  982.         ea.BorderLeft,   hSpace,
  983.         ea.BorderRight,  hSpace,
  984.         ea.BorderTop,    vSpace,
  985.         ea.BorderBottom, vSpace,
  986.         (* ea.Weight,       100, *)
  987.         ea.Child,        frm.NewFrame ( dlg.frame[5], u.done ),
  988.         ea.Child,        lbl.NewLabel ( dlg.label[5],
  989.             ea.BorderBottom, vDiv2,
  990.             u.done ),
  991.         ea.Child,        eam.HGroup (
  992.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  993.             ea.Child,        eam.VGroup (
  994.                 ea.Child,        IntegerGroup ( cat.GetString (cat.gui34), gad[CodeSizeID] ),
  995.                 ea.Child,        IntegerGroup ( cat.GetString (cat.gui35), gad[ConstSizeID] ),
  996.                 u.done ),
  997.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  998.             u.done ),
  999.         u.done );
  1000.     frm.InitFrame ( dlg.frame[5],
  1001.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  1002.     lbl.InitLabel ( dlg.label[5],
  1003.         cat.GetString (cat.gui36), ta, gfx.jam2,
  1004.         {lbl.ShadowText}, dlg.drawInfo );
  1005.  
  1006.     obj[9] := eam.GTButton ( cat.GetString (cat.gui26),
  1007.         ea.ID,           MoreID,
  1008.         ea.Weight,       100,
  1009.         u.done );
  1010.  
  1011.     obj[10] := eam.GTButton ( cat.GetString (cat.gui40),
  1012.         ea.ID,           AboutID,
  1013.         ea.Weight,       1,
  1014.         u.done );
  1015.     obj[11] := eam.GTButton ( cat.GetString (cat.gui37),
  1016.         ea.ID,           SaveID,
  1017.         ea.Weight,       1,
  1018.         u.done );
  1019.     obj[12] := eam.GTButton ( cat.GetString (cat.gui41),
  1020.         ea.ID,           SaveAsID,
  1021.         ea.Weight,       1,
  1022.         u.done );
  1023.     obj[13] := eam.GTButton ( cat.GetString (cat.gui9),
  1024.         ea.ID,           QuitID,
  1025.         ea.Weight,       1,
  1026.         u.done );
  1027.     obj[14] := eam.HGroup (
  1028.         ea.BorderBottom, vSpace,
  1029.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1030.         ea.Child,        obj[10],
  1031.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1032.         ea.Child,        obj[11],
  1033.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1034.         ea.Child,        obj[12],
  1035.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1036.         ea.Child,        obj[13],
  1037.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1038.         u.done );
  1039.     ignore := ea.NewRelation ( obj[14], spt.SameSizeHook,
  1040.         ea.Object, obj[10],
  1041.         ea.Object, obj[11],
  1042.         ea.Object, obj[12],
  1043.         ea.Object, obj[13],
  1044.         u.done );
  1045.  
  1046.     dlg.winObj := eam.VGroup (
  1047.       ea.Child,        eam.VGroup (
  1048.         ea.BorderLeft,   hSpace,
  1049.         ea.BorderRight,  hSpace,
  1050.         ea.BorderTop,    vSpace,
  1051.         ea.BorderBottom, vSpace,
  1052.         ea.Child,        eam.VGroup (
  1053.           ea.Child,        obj[0],
  1054.           ea.Child,        eam.EmptyBox (1, ea.MinHeight, vSpace, u.done),
  1055.           ea.Child,        eam.HGroup (
  1056.             ea.Child,        obj[4],
  1057.             ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1058.             ea.Child,        eam.VGroup (
  1059.               ea.Child,        obj[5],
  1060.               ea.Child,        eam.EmptyBox (1, ea.MinHeight, vSpace, u.done),
  1061.               ea.Child,        obj[6],
  1062.               u.done ),
  1063.             u.done ),
  1064.           u.done ),
  1065.         ea.Child,        eam.EmptyBox (1, ea.MinHeight, vSpace, u.done),
  1066.         ea.Child,        eam.HGroup (
  1067.           ea.Child,        obj[7],
  1068.           ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1069.           ea.Child,        obj[8],
  1070.           ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1071.           ea.Child,        obj[9],
  1072.           u.done ),
  1073.         u.done ),
  1074.       ea.Child,        obj[14],
  1075.       u.done );
  1076.  
  1077.     RETURN (dlg.winObj # NIL)
  1078.   END InitObjects;
  1079.  
  1080. (* ---------------------------------- *)
  1081. PROCEDURE (dlg : OptionsDialog) InitObjects () : BOOLEAN;
  1082.  
  1083.   VAR
  1084.     obj : ARRAY 5 OF ea.OPTR;
  1085.     obj2 : ARRAY 11 OF ea.OPTR;
  1086.     x, ignore, vDiv2 : LONGINT;
  1087.     gad : ARRAY NumGadgets2 OF SYS.ADDRESS;
  1088.     ta : SYS.ADDRESS;
  1089.     txt : ARRAY 11 OF e.LSTRPTR;
  1090.  
  1091.   BEGIN
  1092.     FOR x := 0 TO NumGadgets2 - 1 DO
  1093.       gad[x] := SYS.ADR (dlg.gadget[x])
  1094.     END;
  1095.     ta := SYS.ADR (textAttr[0]);
  1096.  
  1097.     vDiv2 := vSpace DIV 2;
  1098.  
  1099.     (* set up some defaults for all objects *)
  1100.     ignore := ea.SetAttr ( NIL, ea.DefGTTextAttr, ta );
  1101.  
  1102.     (* build the object tree *)
  1103.     txt[0]  := SYS.ADR ("STANDARD");
  1104.     txt[1]  := SYS.ADR ("INITIALISE");
  1105.     txt[2]  := SYS.ADR ("MAIN");
  1106.     txt[3]  := SYS.ADR ("WARNINGS");
  1107.     txt[4]  := SYS.ADR ("REGISTER");
  1108.     txt[5]  := SYS.ADR ("DEBUG");
  1109.     txt[6]  := SYS.ADR ("SMALLCODE");
  1110.     txt[7]  := SYS.ADR ("SMALLDATA");
  1111.     txt[8]  := SYS.ADR ("RESIDENT");
  1112.  
  1113.     FOR x := 0 TO 8 DO
  1114.       obj2[x] := eam.GTCheckBox ( txt[x],
  1115.           ea.GTFlags,         {gt.placeTextRight},
  1116.           ea.InstanceAddress, gad[StandardID + x],
  1117.           ea.ID,              StandardID + x,
  1118.           ea.Weight,          1,
  1119.           u.done )
  1120.     END;
  1121.  
  1122.     obj[0] := eam.VGroup (
  1123.         ea.BorderLeft,   hSpace,
  1124.         ea.BorderRight,  hSpace,
  1125.         ea.BorderTop,    vSpace,
  1126.         ea.BorderBottom, vSpace,
  1127.         ea.Child, frm.NewFrame ( dlg.frame[0], u.done ),
  1128.         ea.Child, lbl.NewLabel ( dlg.label[0],
  1129.             ea.BorderBottom, vDiv2,
  1130.             u.done ),
  1131.         ea.Child, obj2[0],
  1132.         ea.Child, obj2[1],
  1133.         ea.Child, obj2[2],
  1134.         ea.Child, obj2[3],
  1135.         ea.Child, obj2[4],
  1136.         ea.Child, obj2[5],
  1137.         ea.Child, obj2[6],
  1138.         ea.Child, obj2[7],
  1139.         ea.Child, obj2[8],
  1140.         u.done );
  1141.     frm.InitFrame ( dlg.frame[0], {frm.DoubleBorder, frm.Recessed},
  1142.                     dlg.visualInfo, dlg.drawInfo );
  1143.     lbl.InitLabel ( dlg.label[0],
  1144.         cat.GetString (cat.gui30), ta, gfx.jam2,
  1145.         {lbl.ShadowText}, dlg.drawInfo );
  1146.  
  1147.     txt[0]  := SYS.ADR ("TypeChk");
  1148.     txt[1]  := SYS.ADR ("OvflChk");
  1149.     txt[2]  := SYS.ADR ("IndexChk");
  1150.     txt[3]  := SYS.ADR ("RangeChk");
  1151.     txt[4]  := SYS.ADR ("CaseChk");
  1152.     txt[5]  := SYS.ADR ("NilChk");
  1153.     txt[6]  := SYS.ADR ("ReturnChk");
  1154.     txt[7]  := SYS.ADR ("StackChk");
  1155.     txt[8]  := SYS.ADR ("AssertChk");
  1156.     txt[9]  := SYS.ADR ("LongVars");
  1157.     txt[10] := SYS.ADR ("ClearVars");
  1158.  
  1159.     FOR x := 0 TO 10 DO
  1160.       obj2[x] := eam.GTCheckBox ( txt[x],
  1161.           ea.GTFlags,         {gt.placeTextRight},
  1162.           ea.InstanceAddress, gad[TypeChkID + x],
  1163.           ea.ID,              TypeChkID + x,
  1164.           u.done )
  1165.     END;
  1166.  
  1167.     obj[1] := eam.VGroup (
  1168.       ea.BorderLeft,   hSpace,
  1169.       ea.BorderRight,  hSpace,
  1170.       ea.BorderTop,    vSpace,
  1171.       ea.BorderBottom, vSpace,
  1172.       ea.Child,        frm.NewFrame ( dlg.frame[1], u.done ),
  1173.       ea.Child,        lbl.NewLabel ( dlg.label[1],
  1174.         ea.BorderBottom, vDiv2,
  1175.         u.done ),
  1176.       ea.Child,        obj2[0],
  1177.       ea.Child,        obj2[1],
  1178.       ea.Child,        obj2[2],
  1179.       ea.Child,        obj2[3],
  1180.       ea.Child,        obj2[4],
  1181.       ea.Child,        obj2[5],
  1182.       ea.Child,        obj2[6],
  1183.       ea.Child,        obj2[7],
  1184.       ea.Child,        obj2[8],
  1185.       ea.Child,        obj2[9],
  1186.       ea.Child,        obj2[10],
  1187.       u.done );
  1188.     frm.InitFrame ( dlg.frame[1],
  1189.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  1190.     lbl.InitLabel ( dlg.label[1],
  1191.         cat.GetString (cat.gui25), ta, gfx.jam2,
  1192.         {lbl.ShadowText}, dlg.drawInfo );
  1193.  
  1194.     obj[2] := eam.GTButton ( cat.GetString (cat.gui27),
  1195.         ea.ID,           AcceptID,
  1196.         ea.Weight,       1,
  1197.         u.done );
  1198.     obj[3] := eam.GTButton ( cat.GetString (cat.gui28),
  1199.         ea.ID,           CancelID,
  1200.         ea.Weight,       1,
  1201.         u.done );
  1202.     obj[4] := eam.HGroup (
  1203.         ea.BorderBottom, vSpace,
  1204.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1205.         ea.Child,        obj[2],
  1206.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1207.         ea.Child,        obj[3],
  1208.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1209.         u.done );
  1210.     ignore := ea.NewRelation ( obj[4], spt.SameSizeHook,
  1211.         ea.Object, obj[2],
  1212.         ea.Object, obj[3],
  1213.         u.done );
  1214.  
  1215.     dlg.winObj := eam.VGroup (
  1216.       ea.Child,        eam.HGroup (
  1217.         ea.BorderLeft,   hSpace,
  1218.         ea.BorderRight,  hSpace,
  1219.         ea.BorderTop,    vSpace,
  1220.         ea.BorderBottom, vSpace,
  1221.         ea.Child,        obj[0],
  1222.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1223.         ea.Child,        obj[1],
  1224.         u.done ),
  1225.       ea.Child,        obj[4],
  1226.       u.done );
  1227.  
  1228.     RETURN (dlg.winObj # NIL)
  1229.   END InitObjects;
  1230.  
  1231. (* ---------------------------------- *)
  1232. PROCEDURE (dlg : SettingsDialog) OpenWindow () : BOOLEAN;
  1233.  
  1234.   BEGIN
  1235.     dlg.title := cat.GetString (cat.gui39);
  1236.     dlg.flags := {i.windowDrag, i.windowDepth, i.windowClose, i.activate};
  1237.     dlg.IDCMP := {i.closeWindow, i.refreshWindow}
  1238.                  + gt.buttonIDCMP + gt.stringIDCMP
  1239.                  + gt.checkBoxIDCMP + gt.numberIDCMP;
  1240.  
  1241.     RETURN dlg.OpenWindow^()
  1242.   END OpenWindow;
  1243.  
  1244. (* ---------------------------------- *)
  1245. PROCEDURE (dlg : OptionsDialog) OpenWindow () : BOOLEAN;
  1246.  
  1247.   BEGIN
  1248.     dlg.title := cat.GetString (cat.gui29);
  1249.     dlg.flags := {i.windowDrag, i.windowDepth, i.windowClose, i.activate};
  1250.     dlg.IDCMP := {i.closeWindow, i.refreshWindow}
  1251.                  + gt.buttonIDCMP + gt.checkBoxIDCMP;
  1252.  
  1253.     RETURN dlg.OpenWindow^()
  1254.   END OpenWindow;
  1255.  
  1256. (* ---------------------------------- *)
  1257. PROCEDURE* Cleanup ( VAR rc : LONGINT );
  1258.  
  1259.   BEGIN (* Cleanup *)
  1260.     IF settingsDlg # NIL THEN
  1261.       settingsDlg.Close; settingsDlg := NIL
  1262.     END;
  1263.  
  1264.     IF drawInfo # NIL THEN
  1265.       i.FreeScreenDrawInfo (scr, drawInfo);
  1266.       drawInfo := NIL;
  1267.     END;
  1268.  
  1269.     IF visualInfo # NIL THEN
  1270.       gt.FreeVisualInfo (visualInfo);
  1271.       visualInfo := NIL;
  1272.     END;
  1273.  
  1274.     IF scr # NIL THEN
  1275.       i.UnlockPubScreen (e.NILSTR, scr);
  1276.       scr := NIL;
  1277.     END;
  1278.  
  1279.     IF textFont # NIL THEN
  1280.       gfx.CloseFont (textFont);
  1281.       textFont := NIL;
  1282.     END;
  1283.   END Cleanup;
  1284.  
  1285.  
  1286. (* ---------------------------------- *)
  1287. PROCEDURE Open*;
  1288.  
  1289.   (* ---------------------------------- *)
  1290.   PROCEDURE InitDisplay;
  1291.  
  1292.     VAR
  1293.       scrFont : gfx.TextFontPtr;
  1294.  
  1295.     BEGIN (* InitDisplay *)
  1296.       (* lock the screen *)
  1297.       scr := i.LockPubScreen (e.NILSTR);
  1298.       ASSERT (scr # NIL, Errors.postCondition);
  1299.  
  1300.       (* get VisualInfo and DrawInfo *)
  1301.       visualInfo := gt.GetVisualInfo (scr, u.done);
  1302.       drawInfo := i.GetScreenDrawInfo (scr);
  1303.       ASSERT ((visualInfo # NIL) & (drawInfo # NIL), Errors.postCondition);
  1304.  
  1305.       (* Calculate spacing from screen dimensions *)
  1306.       hSpace := scr.width  DIV 80;
  1307.       vSpace := scr.height DIV 64;
  1308.  
  1309.       (* get the font(s) *)
  1310.       scrFont := drawInfo.font;
  1311.       SYS.NEW ( textAttr[0].name,
  1312.                 str.Length (scrFont.message.node.name^) + 1 );
  1313.       COPY (scrFont.message.node.name^, textAttr[0].name^);
  1314.       textAttr[0].ySize := scrFont.ySize;
  1315.       textAttr[0].style := scrFont.style;
  1316.       textAttr[0].flags := scrFont.flags;
  1317.  
  1318.       textAttr[1].name := SYS.ADR ("helvetica.font");
  1319.       textAttr[1].ySize := 24;
  1320.       textAttr[1].style := gfx.normal;
  1321.       textAttr[1].flags := {gfx.diskFont, gfx.romFont};
  1322.  
  1323.       textFont := df.OpenDiskFont (textAttr[1]);
  1324.       IF textFont = NIL THEN textAttr[1] := textAttr[0] END
  1325.     END InitDisplay;
  1326.  
  1327.   BEGIN (* Open *)
  1328.     ASSERT (ea.base # NIL, Errors.noLibrary);
  1329.     ASSERT (settingsDlg = NIL, Errors.preCondition);
  1330.     Kernel.SetCleanup (Cleanup);
  1331.     InitDisplay;
  1332.     NEW (settingsDlg);
  1333.     IF settingsDlg.Open (visualInfo, drawInfo) THEN
  1334.       Events.SimpleLoop (settingsDlg, Events.NoGC);
  1335.       settingsDlg.Close; settingsDlg := NIL
  1336.     END
  1337.   END Open;
  1338.  
  1339. BEGIN
  1340.   tags1[0].tag := gt.stMaxChars; tags1[0].data := OCM.PathLen;
  1341.   tags1[1].tag := u.done;
  1342.   tags2[0].tag := gt.stMaxChars; tags2[0].data := OCM.ExtLen;
  1343.   tags2[1].tag := u.done;
  1344. END OCPrefsGUI.
  1345.  
  1346. (*************************************************************************
  1347.  
  1348.   $Log: OCPrefsGUI.mod $
  1349. # Revision 2.2  1995/06/29  19:13:34  fjc
  1350. # - OCPrefs_2_3
  1351. #
  1352. # Revision 2.1  1995/06/15  18:21:44  fjc
  1353. # - Fixed event handling code to make SMALLDATA and RESIDENT
  1354. #   mutually exclusive.
  1355. #
  1356. # Revision 1.7  1995/06/04  22:57:19  fjc
  1357. # *** empty log message ***
  1358. #
  1359. # Revision 1.6  1995/06/03  19:39:13  fjc
  1360. # - Split off options and pragmas groups into a seperate
  1361. #   dialog.
  1362. #
  1363. # Revision 1.5  1995/06/02  18:50:24  fjc
  1364. # - Yet more fiddling with the layout.
  1365. #
  1366. # Revision 1.4  1995/05/31  23:47:11  fjc
  1367. # - Redesigned to reflect changes in preferences settings.
  1368. #
  1369. # Revision 1.3  1995/05/30  23:34:29  fjc
  1370. # - More fiddling with layout.
  1371. #
  1372. # Revision 1.2  1995/05/29  21:30:02  fjc
  1373. # - Moved EADialog declarations to EADialogs.
  1374. # - Numerous changes to the layout and presentation.
  1375. #
  1376. # Revision 1.1  1995/05/19  16:14:28  fjc
  1377. # Initial revision
  1378. #
  1379. *************************************************************************)
  1380.